package cn.demoncat.util.mybatis.base;


import java.io.Serializable;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;

import cn.demoncat.util.exception.ReflexRuntimeException;
import cn.demoncat.util.lang.entity.NullDefault;

/**
 * BaseEntity{类，主键}
 * 
 * @author 延晓磊
 * 
 * @since 2017年5月16日
 */
public class BaseEntity<T,P extends Serializable> extends NullDefault implements Serializable,Cloneable{
 
	private static final long serialVersionUID = 8645038266772472252L;
	
	// 主键
	protected P id;
 
	/**
	 * 反射toString
	 */
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
    /**
	 * 反射hashCode
	 */
    @Override
    public int hashCode() {
    	return HashCodeBuilder.reflectionHashCode(this);
    }
    /**
	 * 反射equals
	 */
    @Override
    public boolean equals(Object o) {
    	return EqualsBuilder.reflectionEquals(this,o);
    }
    /**
     * 克隆
     */
    @SuppressWarnings("unchecked")
	@Override
	public T clone(){
		try {
			return (T) super.clone();
		} catch (CloneNotSupportedException e) {
			throw new ReflexRuntimeException("对象克隆失败", e);
		}
	}
    
    /**
     * 
     * 功能描述：获取ID 
     *
     * @return id
     * 
     * @author 延晓磊
     *
     * @since 2017年5月16日
     */
	public P getId() {
		return id;
	}
	
	/**
	 * 
	 * 功能描述：设置ID
	 *
	 * @param id
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年5月16日
	 */
	public void setId(P id) {
		this.id =  id;
	}

}
